package ink.tiptop.convert;

import ink.tiptop.pojo.Car;
import ink.tiptop.pojo.CarDto;
import org.mapstruct.InheritConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;


/**
 * (OrderInfo)dto vo po 等转换接口
 *
 * @author zjf
 * @since 2020-08-14 20:51:45
 * default：映射器不使用组件模型，实例通常通过Mappers.getMapper(Class clazz)检索。
 * cdi：生成的映射器是应用程序范围的CDI bean，可以通过@Inject注解来检索。
 * spring：生成的映射器是一个单例范围的Spring bean，可以通过@Autowired检索。
 * jsr330：生成的映射器使用{@code @Named}进行注释，并且可以通过@Inject检索，例如使用Spring。
 */
@Mapper(componentModel = "spring",uses = A_UsualConvert.class) // 注入到spring
public interface B_ExtendsConvert {

    @Mapping(target = "height", source = "height")
    Car carDtoToCar(CarDto car);

    /**
     * @InheritConfiguration 这个注解可以搜索映射相同的方法
     *  在方法上声明@InheritConfiguration允许MapStruct搜索继承候选以应用从中继承的方法的注解。
     *  如果A的所有类型（源类型和结果类型）可分配给B的相应类型，
     *  则一方法A可以从另一方法B继承配置。需要在当前映射器，
     *  父类/接口或共享配置界面（如10.3.共享配置中所述）中定义被认为是继承的方法。
     *
     *  如果多个方法用于继承，则必须在注解中指定方法名称：@InheritConfiguration(name =“carDtoToCar”)。
     *  方法可以使用@InheritConfiguration并通过另外应用@Mapping，@BorderMapping等来覆盖或修改配置。
     * @param carDto
     * @param car
     */
//    @InheritConfiguration(name = "carDtoToCar")
    @InheritConfiguration
    void carDtoIntoCar(CarDto carDto, @MappingTarget Car car);

//    这样写也可以
//    @InheritConfiguration
//    Car carDtoIntoCar(CarDto carDto);
}
